//public class Test {
//    public static void main(String[] args) {
//        Object A = new Object();
//        Object B = new Object();
//        Thread t1 = new Thread(()->{
//            synchronized(A) {
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//                synchronized (B) {
//                    System.out.println("线程 t1 拿到B锁");
//                }
//            }
//        });
//
//        Thread t2 = new Thread(()->{
//            synchronized(B) {
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//                synchronized (A) {
//                    System.out.println("线程 t2 拿到A锁");
//                }
//            }
//        });
//
//        t1.start();
//        t2.start();
//    }
//}

//
//public class Test {
//    public static void main(String[] args) {
//        Object locker1 = new Object();
//        Object locker2 = new Object();
//        Thread a = new Thread(()->{
//            synchronized (locker1) {
//                try {
//                    locker1.wait();
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//                synchronized (locker2) {
//                    try {
//                        locker2.wait(1000);
//                    } catch (InterruptedException e) {
//                        throw new RuntimeException(e);
//                    }
//                    System.out.println("A");
//                }
//            }
//        });
//        Thread b = new Thread(()->{
//            synchronized (locker1) {
//                try {
//                    locker1.wait();
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//                synchronized (locker2) {
//                    System.out.println("B");
//                    locker2.notify();
//                }
//            }
//        });
//        Thread c = new Thread(()->{
//            synchronized (locker1) {
//                System.out.println("C");
//                locker1.notifyAll();
//            }
//        });
//
//        a.start();
//        b.start();
//        c.start();
//    }
//}
//
//import java.util.Arrays;
//
//public class Test {
//    public static void main(String[] args) {
////        String s = "abcdejifdk";
////        System.out.println(s.indexOf("dej"));
////        System.out.println(s.lastIndexOf("dej"));
//
////        String str1 = String.valueOf(1234);
////        String str2 = String.valueOf(12.33);
////        System.out.println(str1);
////        System.out.println(str2);
//
////        int data1 = Integer.parseInt("1234");
////        double data2 = Double.parseDouble("12.34");
////        System.out.println(data1);
////        System.out.println(data2);
//
////        String s1 = "hello";
////        String s2 = "Hello";
////        System.out.println(s1.toLowerCase());;
////        System.out.println(s2.toUpperCase());
//
////        char[] arr = {'a','b','c','d'};
////        String str = new String(arr);
////        System.out.println(str);
//
////        String s1 = "hello";
////        char[] array = s1.toCharArray();
////        System.out.println(Arrays.toString(array));
//
////        String str = "abc abdc abdfek";
////        String ret1 = str.replace("ab","00");
////        System.out.println(ret1);
//
////        String str = "hello abc wrold";
////        String[] ret = str.split(" ");
////        for(int i = 0; i < ret.length; i++) {
////            System.out.println(ret[i]);
////        }
//
////        String str = "      abcsafdl   ";
////        String ret = str.substring(0,4);
////        System.out.println(ret);
////        System.out.println(str.substring(4));
////        System.out.println(str.trim());
//
//        String str = "dklfsl";
//        StringBuilder sb = new StringBuilder(str);
//        System.out.println(sb);
//        System.out.println(sb.delete(2,4));
//        System.out.println(sb.replace(2,4,"000000000"));
//
//    }
//}
//
//import java.util.Scanner;
//
//public class Test {
//    public static void main(String[] args) {
//        int n=5;
//        Scanner scanner = new Scanner(System.in);
//        //n = scanner.nextInt();
//        for(int i = 0; i < n-1; i++) {
//            for(int j = n-1-i; j>0; j--) {
//                System.out.print(" ");
//            }
//            for(int j = 0; j<(i+1)*2-1; j++) {
//                System.out.print("*");
//            }
//            System.out.println();
//        }
//
//        for(int i = 0; i < n; i++) {
//            for(int j = 0; j < i; j++) {
//                System.out.print(" ");
//            }
//            for(int j = 0; j < (n-i)*2-1; j++) {
//                System.out.print("*");
//            }
//            System.out.println();
//        }
//    }
//}

import java.util.*;

public class Test {
    public static void main(String[] args) {
        int count = 0; // 重复的个数
        int total = 0; // 事件的种数
        Set<Integer> set = new HashSet<>();
        int n , k;
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        k = scanner.nextInt();
        for(int i = 0; i < n; i++) {
            int x;
            x =scanner.nextInt();
            if(!set.contains(x)) {
                set.add(x);
                total++;
            }else {
                count++;
            }
        }
        if(count > k) {
            System.out.println(total);
        }else {
            int ans = total - (k - count);
            System.out.println(ans);
        }
    }
}